// DateUtils.js
export default class DateUtils {
    // 默认日期格式
    static DATE_FORMAT = {
        FULL: 'YYYY-MM-DD HH:mm:ss',
        DATE: 'YYYY-MM-DD',
        TIME: 'HH:mm:ss',
        MONTH: 'YYYY-MM',
    };

    /**
     * 格式化时间为友好显示
     * @param {string|Date} timeStr - 时间字符串或Date对象
     * @returns {string} 格式化后的友好时间字符串
     */
    static formatFriendlyTime(timeStr) {
        if (!timeStr || isNaN(new Date(timeStr).getTime())) {
            return '';
        }

        const date = new Date(timeStr);
        const currentDate = new Date();
        
        const MS_PER_DAY = 24 * 60 * 60 * 1000;
        const timeDiff = currentDate - date;
        const daysDiff = Math.floor(timeDiff / MS_PER_DAY);
        const monthsDiff = Math.floor(daysDiff / 30);

        if (daysDiff === 0) return this.formatDateTime(date);
        if (daysDiff === 1) return "昨天";
        if (daysDiff < 3) return `${daysDiff}天前`;
       if (daysDiff >= 7 && daysDiff < 30) return `${Math.floor(daysDiff / 7)}周前`;;
        return this.formatDate(date);
    }

    /**
     * 格式化日期（年月日）
     * @param {Date|string} date - 日期对象或字符串
     * @returns {string} YYYY-MM-DD
     */
    static formatDate(date) {
        date = new Date(date);
        const year = date.getFullYear();
        const month = String(date.getMonth() + 1).padStart(2, '0');
        const day = String(date.getDate()).padStart(2, '0');
        return `${year}-${month}-${day}`;
    }

    /**
     * 格式化日期时间（年月日时分秒）
     * @param {Date|string} date - 日期对象或字符串
     * @returns {string} YYYY-MM-DD HH:mm:ss
     */
    static formatDateTime(date) {
        date = new Date(date);
        const dateStr = this.formatDate(date);
        const hours = String(date.getHours()).padStart(2, '0');
        const minutes = String(date.getMinutes()).padStart(2, '0');
        const seconds = String(date.getSeconds()).padStart(2, '0');
        return `${dateStr} ${hours}:${minutes}:${seconds}`;
    }

    /**
     * 获取指定日期的开始时间
     * @param {Date|string} date - 日期对象或字符串
     * @returns {Date} 该日期的00:00:00时间
     */
    static getStartOfDay(date) {
        date = new Date(date);
        date.setHours(0, 0, 0, 0);
        return date;
    }

    /**
     * 获取指定日期的结束时间
     * @param {Date|string} date - 日期对象或字符串
     * @returns {Date} 该日期的23:59:59时间
     */
    static getEndOfDay(date) {
        date = new Date(date);
        date.setHours(23, 59, 59, 999);
        return date;
    }

    /**
     * 判断是否为同一天
     * @param {Date|string} date1 - 第一个日期
     * @param {Date|string} date2 - 第二个日期
     * @returns {boolean}
     */
    static isSameDay(date1, date2) {
        return this.formatDate(date1) === this.formatDate(date2);
    }

    /**
     * 计算两个日期之间的天数差
     * @param {Date|string} date1 - 第一个日期
     * @param {Date|string} date2 - 第二个日期
     * @returns {number} 天数差
     */
    static getDaysDiff(date1, date2) {
        const time1 = new Date(date1).getTime();
        const time2 = new Date(date2).getTime();
        const MS_PER_DAY = 24 * 60 * 60 * 1000;
        return Math.floor(Math.abs(time1 - time2) / MS_PER_DAY);
    }
}